package com.deliccio.controller.mantenimientos;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.deliccio.entitys.Cliente;
import com.deliccio.entitys.DetalleProducto;
import com.deliccio.entitys.Estadosgenerales;
import com.deliccio.entitys.Foto;
import com.deliccio.entitys.Menu;
import com.deliccio.entitys.Parametros;
import com.deliccio.entitys.Producto;
import com.deliccio.entitys.Ranking;
import com.deliccio.entitys.Sucursales;
import com.deliccio.entitys.Usuario;
import com.deliccio.service.MantenimientoProductosService;
import com.deliccio.service.PrincipalService;
import com.deliccio.util.Constantes;

@Controller
@RequestMapping("/mantenimiento")
public class MantenimientoProductosController{

	@Autowired
	private MantenimientoProductosService mantenimientoProductosService;

	@Autowired
	private PrincipalService principalService;

	@RequestMapping(value="/producto",method=RequestMethod.GET)
	public String mantenimientosProductos(@RequestParam(required=false) Integer inter,HttpSession session,Model model){
		Usuario usuario=(Usuario) session.getAttribute(Constantes.SESION_USUARIO);
		Cliente cliente=(Cliente) session.getAttribute(Constantes.SESION_CLIENTE);
		List<Menu> menus=null;
		if(usuario != null){
			session.setAttribute(Constantes.SESION_USUARIO,usuario);
			menus=principalService.obtenerMenusUsuario(usuario);
		}
		else{
			session.setAttribute(Constantes.SESION_CLIENTE,cliente);
			menus=principalService.obtenerMenusCliente(cliente);
		}
		if(usuario == null && cliente == null){
			menus=principalService.obtenerMenus();
		}

		if(menus != null){
			model.addAttribute("menus",menus);
		}
		List<Ranking> lstProductos = principalService.listaProductos();
		model.addAttribute("lstProductos",lstProductos);
		session.setAttribute(Constantes.SESION_COD_INTER,inter);
		return "mantenimiento/productos/productos";
	}

	@RequestMapping(value="/obtenerListaProductos",method=RequestMethod.GET)
	public String obtenerListaProductos(HttpSession session,Model model){
		List<Producto> lstProductos=mantenimientoProductosService.obtenerProductos();
		model.addAttribute("lstProductos",lstProductos);
		return "mantenimiento/productos/listaProductos";
	}

	@RequestMapping(value="/obtenerListaProductosPadres/{tipo}",method=RequestMethod.GET)
	public @ResponseBody
	List<Producto> obtenerListaProductosPadres(@PathVariable int tipo,HttpSession session,Model model){
		return mantenimientoProductosService.obtenerListaProductosXTipo(tipo);
	}

	@RequestMapping(value="/obtenerProducto/{id}",method=RequestMethod.GET)
	public @ResponseBody List<DetalleProducto> obtenerListaProductosPadres(@PathVariable int id,Model m){	
		return mantenimientoProductosService.obtenerDetalleProducto(id);
	}

	@RequestMapping(value="/nuevoProducto",method=RequestMethod.GET)
	public String nuevoProducto(HttpSession session,Model model){
		List<Parametros> tiposConjuntos=mantenimientoProductosService.obtenerConjuntos();
		model.addAttribute("tiposConjuntos",tiposConjuntos);
		List<Estadosgenerales> estadosgenerales=mantenimientoProductosService.obtenerEstados();
		model.addAttribute("estadosgenerales",estadosgenerales);
		List<Sucursales> lstSucursalesDisponibles=mantenimientoProductosService.obtenerSucursalesDisponibles();
		model.addAttribute("lstSucursalesDisponibles",lstSucursalesDisponibles);		
		return "mantenimiento/productos/revisarProductos";
	}
	
	@RequestMapping(value="/modificarProducto/{id}",method=RequestMethod.GET)
	public String modificarProducto(@PathVariable int id ,HttpSession session,Model model,HttpServletRequest request){
		Producto p= mantenimientoProductosService.obtenerProducto(id);
		Foto foto=mantenimientoProductosService.buscarFoto(p.getFoto(),request);
		p.setFoto(foto);
		model.addAttribute("producto",p);		
		List<Parametros> tiposConjuntos=mantenimientoProductosService.obtenerConjuntos();
		model.addAttribute("tiposConjuntos",tiposConjuntos);
		List<Estadosgenerales> estadosgenerales=mantenimientoProductosService.obtenerEstados();
		model.addAttribute("estadosgenerales",estadosgenerales);
		List<Sucursales> lstSucursalesAsignados=mantenimientoProductosService.obtenerSucursalesAsignados(p);
		model.addAttribute("lstSucursalesAsignados",lstSucursalesAsignados);		
		List<Sucursales> lstSucursalesDisponibles=mantenimientoProductosService.obtenerSucursalesDisponibles(p);
		model.addAttribute("lstSucursalesDisponibles",lstSucursalesDisponibles);		
		return "mantenimiento/productos/revisarProductos";
	}
	



	@RequestMapping(value="/subirImagenMesa",method=RequestMethod.POST)
	public @ResponseBody
	String subirArchivo(@RequestParam MultipartFile archivoSubir,HttpServletRequest request) throws IOException,Exception{
		return mantenimientoProductosService.guardarImagenTemporal(archivoSubir,request);
	}

	@RequestMapping(value="/guardarProducto",method=RequestMethod.POST)
	public @ResponseBody
	int guardarProducto(Ranking producto, int[] idAsignados, int x,int y,int w,int h,String fileRuta,String nameImage,String formato,int width,int height,HttpServletRequest request){
		System.out.println("formato formato :"+formato);
		return mantenimientoProductosService.guardarProducto(producto,idAsignados,x,y,w,h,fileRuta,nameImage,formato,width,height,request);
	}
}
